package top.shiyiri.map;

import org.junit.Test;

import java.util.*;

/**
 * @author Aunean
 * @date 2022/1/6
 */
/*
五、Map中定义的方法：
添加、删除、修改操作：
Object put(Object key,Object value)：将指定key-value添加到(或修改)当前map对象中
void putAll(Map m):将m中的所有key-value对存放到当前map中
Object remove(Object key)：移除指定key的key-value对，并返回value
void clear()：清空当前map中的所有数据

元素查询的操作：
Object get(Object key)：获取指定key对应的value
boolean containsKey(Object key)：是否包含指定的key
boolean containsValue(Object value)：是否包含指定的value
int size()：返回map中key-value对的个数
boolean isEmpty()：判断当前map是否为空
boolean equals(Object obj)：判断当前map和参数对象obj是否相等

元视图操作的方法：
Set keySet()：返回所有key构成的Set集合
Collection values()：返回所有value构成的Collection集合
Set entrySet()：返回所有key-value对构成的Set集合
 */
public class MapMethodTest {
    HashMap<Object, Object> map = new HashMap<>();
    {
        //添加
        map.put("AA", 123);
        map.put(45, 123);
        map.put("BB", 123);
    }
    @Test
    public void test1() {

        //修改
        map.put("AA", 223);

        System.out.println(map);//{AA=223, BB=123, 45=123}

        //Object remove(Object key)：移除指定key的key-value对，并返回value
        map.remove("AA");
        System.out.println(map);//{BB=123, 45=123}

        map.clear();
        System.out.println(map);//{}
        System.out.println(map.size());//0
    }

    @Test
    public void test2() {
        System.out.println(map);

        //Object get(Object key)：获取指定key对应的value
        System.out.println(map.get("AA"));//123

        //boolean containsKey(Object key)：是否包含指定的key
        System.out.println(map.containsKey("AA"));//true

        //boolean containsValue(Object value)：是否包含指定的value
        System.out.println(map.containsValue(123));

        map.clear();
        System.out.println(map.isEmpty());//true
    }

    @Test
    public void test3() {

        //Set keySet()：返回所有key构成的Set集合
        Set<Object> objects = map.keySet();
        objects.forEach(System.out::println);

        //Collection values()：返回所有value构成的Collection集合
        Collection<Object> values = map.values();
        Iterator<Object> iterator = values.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        //Set entrySet()：返回所有key-value对构成的Set集合
        Set<Map.Entry<Object, Object>> entries = map.entrySet();
        for (Map.Entry<Object, Object> entrie: entries) {
            System.out.println(entrie);
            System.out.print(entrie.getKey());
            System.out.print(": ");
            System.out.println(entrie.getValue());
        }
    }
}
